home *** CD-ROM | disk | FTP | other *** search
/ Precision Software Appli…tions Silver Collection 1 / Precision Software Applications Silver Collection Volume One (PSM) (1993).iso / windows / games / bjack1.exe / SERVER.BAS < prev    next >
BASIC Source File  |  1991-11-19  |  6KB  |  139 lines

  1.  
  2. Function LMNetServerEnum2_L1% (Server$, VB_ServerInfo() As server_info_1, ServerType&, Domain$)
  3.  
  4. ' Wrapper:  LMNetServerEnum2_L1
  5. '    File:  SERVER.BAS
  6. ' Purpose:  Lists all servers of the specified type(s)
  7. '           that are visible in the specified domain(s).
  8. '           For example, an application can call this
  9. '           wrapper to list all domain controllers only
  10. '           or all SQL servers only.
  11.  
  12. '   Data Structure:  server_info_1
  13. '            Level:  1
  14. ' Associated Files:  SERVER.TXT
  15.  
  16. ' Parameters:  Server - the name of the server on which to execute the
  17. '                       command. A NULL string specifies the local computer.
  18.  
  19. '              VB_ServerInfo - server_info array in which to store the
  20. '                       returned data.  The array will be ReDimmed to the
  21. '                       required size and will be one-based.
  22.  
  23. '              ServerType - specifies the type(s) of servers to enumerate.
  24. '                       The ServerType is tested against the sv1_type
  25. '                       element of each entry.
  26.  
  27. '              Domain - contains the name of the domain in which to
  28. '                       enumerate servers of the specified type(s).
  29. '                       If Domain is a NULL string, servers are enumerated
  30. '                       for the primary domain, logon domain, and other
  31. '                       domains.
  32.  
  33. ' Variables used in the NetServerEnum2 API call
  34.     Dim Level As Integer              ' information level
  35.     Dim BufferPointer As Long         ' pointer to LM buffer
  36.     Dim BufferSize As Integer         ' buffer size
  37.     Dim Entries As Integer            ' entries returned
  38.     Dim TotalAvail As Integer         ' total entries available
  39.     Dim TotalAvail2 As Integer        ' total entries available - 2nd call
  40.  
  41. ' Other variables
  42.     Dim result As Integer          ' return value for function calls
  43.     Dim result1 As Integer          ' return value for LM API function
  44.     Dim result2 As Integer          ' return value for EnumBufferToVBArray
  45.     Dim result3 As Integer          ' return value for FreeLMBuffer
  46.  
  47.  
  48.     Level = 1   ' Designates information level, cannot just change this
  49.                 ' value to change info level - structure name and constant
  50.                 ' name must also be changed (server_info_1 and
  51.                 ' FMT_server_info_1).  The function name (LMNetServerEnum2_L1)
  52.                 ' should also be changed.
  53.  
  54.     ReDim VB_ServerInfo(0)  ' set to no entries present
  55.  
  56.     If ERROR_MORE_DATA = 0 Then
  57.         MsgBox "The constant ERROR_MORE_DATA is not defined and is required.", 48, "LMNetServerEnum2_L1 Error"
  58.         LMNetServerEnum2_L1 = -1
  59.     End If
  60.  
  61.     Do      ' Use a loop since the NetServerEnums function may be called
  62.             ' multiple times if Servers are added between calls.
  63.             ' This is unlikely, but could happen.
  64.  
  65. ' Call NetServerEnum2 with a zero length to get the total number
  66. ' of entries available.  This will be used to allocate the buffer.
  67.         result1 = NetServerEnum2(Server, Level, 0&, 0, Entries, TotalAvail, ServerType, Domain)
  68.     
  69.         If result1 <> ERROR_MORE_DATA Then      ' unexpected return code
  70.             LMNetServerEnum2_L1 = result1             ' set return code
  71.             Exit Function
  72.         End If
  73.  
  74. ' Create LM buffer and get size in BufferSize
  75.         BufferPointer = CreateLMBuffer(FMT_server_info_1, TotalAvail, BufferSize)
  76.  
  77.         If BufferPointer = 0& Then      ' error, unable to allocate buffer
  78.             LMNetServerEnum2_L1 = -1
  79.             Exit Function
  80.         End If
  81.  
  82. ' Call LM API function NetServerEnum2 to get data
  83.         result1 = NetServerEnum2(Server, Level, BufferPointer, BufferSize, Entries, TotalAvail, ServerType, Domain)
  84.     
  85. ' check for error return
  86.         If result1 <> NERR_Success Then     ' error occurred
  87.             If TotalAvail2 > TotalAvail Then    ' Servers added between calls
  88.                 TotalAvail = TotalAvail2
  89.                 result3 = FreeLMBuffer(BufferPointer)
  90.                 If result3 <> 0 Then             ' error freeing LM buffer
  91.                     LMNetServerEnum2_L1 = result3     ' set return for function
  92.                     Exit Function
  93.                 End If
  94.             ElseIf result1 = ERROR_MORE_DATA Or result1 = ERROR_NOT_ENOUGH_MEMORY Then
  95.                 If BufferSize = &HFFFF Then
  96. ' More data than LAN Manager can return - take what we have.
  97.                     Exit Do
  98.                 End If
  99.             Else            ' error, return the error
  100.                 LMNetServerEnum2_L1 = result1           ' set return for function
  101.                 result3 = FreeLMBuffer(BufferPointer)   ' free the memory
  102.                 Exit Function
  103.             End If
  104.         Else
  105.             Exit Do     ' completed successfully, exit Do loop
  106.         End If
  107.  
  108.     Loop    ' end Do loop
  109.  
  110.     If Entries = 0 Then     ' no servers gotten
  111.         result3 = FreeLMBuffer(BufferPointer)  ' free LM buffer
  112.         If result1 <> NERR_Success Then
  113.             LMNetServerEnum2_L1 = result1
  114.         Else
  115.             LMNetServerEnum2_L1 = result3
  116.         End If
  117.         Exit Function
  118.     End If
  119.     
  120. ' Set # of entries for user_info array (one-based)
  121.     ReDim VB_ServerInfo(1 To Entries)
  122.  
  123. ' Copy data from LM buffer to user_info array
  124.     result2 = EnumBufferToVBArray(VB_ServerInfo(1), Len(VB_ServerInfo(1)), BufferPointer, BufferSize, FMT_server_info_1, Entries)
  125.     
  126.     result3 = FreeLMBuffer(BufferPointer)  ' free LM buffer
  127.  
  128. ' check if any errors to return
  129.     If result1 <> NERR_Success Then
  130.         LMNetServerEnum2_L1 = result1
  131.     ElseIf result2 <> NERR_Success Then
  132.         LMNetServerEnum2_L1 = result2
  133.     Else
  134.         LMNetServerEnum2_L1 = result3
  135.     End If
  136.  
  137. End Function
  138.  
  139.